package com.tfjybj.itoo.exam.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.exam.entity.TemplateEntity;
import com.tfjybj.itoo.exam.model.ExamPaperModel;
import com.tfjybj.itoo.exam.model.QuestionTypeModel;
import com.tfjybj.itoo.exam.model.TemplateInfoModel;
import com.tfjybj.itoo.exam.model.TemplateModel;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;


/**
 * TemplateService接口
 * template表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
public interface TemplateService extends BaseServicePlus<TemplateEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据模板名称模糊查询template
     *
     * @param name     模板名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @param courseId
     * @return 模糊查询的template
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    PageInfo<TemplateModel> queryByLikeName(String name, Integer pageNo, Integer pageSize, String courseId);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据操作人查询template
     *
     * @param operator 操作人
     * @param pageNo   页码
     * @param pageSize 页数
     * @param courseId 课程id  @return 查询的template
     * @author 邓立瑶
     * @since 2.0.0 2018年11月13日14:15:26
     */
    PageInfo<TemplateModel> queryByOperator(String operator, Integer pageNo, Integer pageSize, String courseId);

    /**
     * 根据级联条件查询template信息（操作人、组卷方式、
     *
     * @param operator       操作人
     * @param organizingType 组卷方式
     * @param startTime      开始时间
     * @param endTime        结束时间
     * @return template信息
     * @author 邓立瑶
     * @since 1.0.0 2018-10-25 11:00:20
     */
    List<TemplateModel> queryByTemplateTypeModel(String operator, String organizingType, String startTime, String endTime);


    /**
     * 查询所有组卷方式queryAllOrganization
     *
     * @return organizationType集合
     * @author 邓立瑶
     * @since 2.0.0 2018年11月14日11:07:46
     */
    List<TemplateEntity> queryAllOrganization();

    /**
     * 根据组卷方式和操作人查询queryByMethodOperator
     *
     * @return 查询的template
     * @author 邓立瑶
     * @since 2.0.0 2018年11月23日16:57:52
     */
    List<TemplateEntity> queryByMethodOperator(String operator, String organizingType);

    /**
     * 根据templateId
     *
     * @return 返回selectTempModel
     * @author 邓立瑶
     * @since 2018-11-25 11:46:57
     */
    TemplateModel selectTempModel(String templateId);

    /**
     * 添加template
     *
     * @return 返回 templateinsert
     * @author 杨海云
     * @since 2018-11-25 11:46:57
     */
    String insertTemplate(@RequestBody TemplateModel model);

    /**
     * 添加固定抽题template--随堂小练用
     *
     * @return 返回 templateinsert
     * @author 任蒙蒙
     * @since 2019-1-29 22:20:57
     */
    ExamPaperModel insertTemplateForFix(@RequestBody TemplateModel model);

    /**
     * 根据templateId
     *
     * @return 返回selTempModel
     * @author 王雪芬
     * @since 2018-11-25 11:46:57
     */
    TemplateEntity queryExamStudentExamtem(String templateId);


    /**
     * 根据模板名称模糊查询template（限制操作人）
     *
     * @param name     模板名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @param operator 操作人
     * @return 模糊查询的template
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    PageInfo<TemplateEntity> queryTemplateByLikeNameAndOperator(String name, String operator, Integer pageNo, Integer pageSize);


    List<Integer> queryCompletion(String questionTypeId, String operator, String questionClassifyId, String courseId);

    List<QuestionTypeModel> queryQuestionType(String courseId, String operator);

    boolean updataTemplate(String id, String status);

    /**
     * 根据课程id,操作人,模板使用状态查询所有模板
     *
     * @param operator   操作人
     * @param courseId   课程id
     * @param tempStatus 模板状态
     * @return 返回符合条件的集合
     * @author maying
     * @since 2019-1-26 10:36:05
     */
    List<TemplateModel> selectAllTemplate(String operator, String courseId, Integer tempStatus);

    String installRandomQuestions(TemplateModel templateModelList);


    /**
     * 查询模板名称是否重复
     *
     * @param name
     * @return 模板名称是否重复
     * @author 贾建清
     * @since 2.0.0 2019-2-19 16:10:38
     */
    List<TemplateModel> queryTemplateName(String name);

    boolean updateTemplateById(String id);

    List<TemplateModel> queryByMethodOperatorandOrganizingType(String operator, String organizingType);


    /**
     * 替换Redis中的题目
     *
     * @param templateId templateId
     * @return ITOO
     * @author 郭凯
     * @since 2.0.0 2019-2-24 19:58:11
     */
    boolean updateTemplateByQuestionId(String templateId, String courseId, String operator, String newQuestionId, String oldQuestionId);


    /**
     * 根据模板id查询模板信息
     *
     * @param id 模板id
     * @return 模板信息
     * @author 贾建清
     * @since 2.0.0 2019-2-26 17:12:46
     */
    List<TemplateInfoModel> queryTemplateInfo(String id);

    /**
     * 根据试题id查询试题题干及选项
     * @param id
     * @return 试题集合
     * @author 李青松
     * @since 2.0.0 2019年3月19日 15:10:54
     */
    List queryByQuestionId(String[] id);
}
